gui: fix dark mode change on Windows 10 with universal style
authorJyrki Gadinger <nilsding@nilsding.org>
Mon, 17 Mar 2025 14:35:49 +0000 (15:35 +0100)
committerbackportbot[bot] <backportbot[bot]@users.noreply.github.com>
Tue, 18 Mar 2025 07:54:44 +0000 (07:54 +0000)
The _Universal_ QML style has a theme that uses the colour scheme from
the system.  This can be set by either configuring
`qtquickcontrols2.conf` or setting the environment variable
`QT_QUICK_CONTROLS_UNIVERSAL_THEME=System`.

Unfortunately, due to [QTBUG-128825], setting the theme in the
configuration file/environment variable results in the dark/light mode
setting only be set during startup, not during runtime.  Not ideal, but
still better than not having a broken dark mode theme at all.

Fixes #7991

[QTBUG-128825]: https://bugreports.qt.io/browse/QTBUG-128825

Signed-off-by: Jyrki Gadinger <nilsding@nilsding.org>
src/gui/main.cpp

index 46fcfcc4dfcf060cd865353f73fe0d8be3c412fe..dbbffc9fd94837c7ed7d30591bbbcdb1c37b777e 100644 (file)
@@ -87,6 +87,10 @@ int main(int argc, char **argv)
     if (QOperatingSystemVersion::current().version() < QOperatingSystemVersion::Windows11.version()) {
         qmlStyle = QStringLiteral("Universal");
         widgetsStyle = QStringLiteral("Fusion");
+        if (qEnvironmentVariableIsEmpty("QT_QUICK_CONTROLS_UNIVERSAL_THEME")) {
+            // initialise theme with the light/dark mode setting from the OS
+            qputenv("QT_QUICK_CONTROLS_UNIVERSAL_THEME", "System");
+        }
     } else {
         qmlStyle = QStringLiteral("FluentWinUI3");
         widgetsStyle = QStringLiteral("windows11");